// 结构体
package main

import "fmt"

//Person 的结构体 大写是为了其他包能否调用到这个属性
type Person struct {
	Name    string
	Age     int
	Sex     string
	Address //结构体嵌套
}

//Address 结构体嵌套
type Address struct {
	Address string
}

// 初始化函数
func newPerson(name string, age int, sex string, address string) *Person {
	return &Person{
		Name: name,
		Age:  age,
		Sex:  sex,
		Address: Address{
			Address: address,
		},
	}
}

// 方法
func (p *Person) guonian() {
	p.Age++
}

// 上面都使用了指针，是为了复制的时候节省内存
func main() {
	p1 := newPerson("丫丫", 18, "男", "上海")
	fmt.Println(p1)
	p1.guonian()
	fmt.Println(p1.Age)
}
